package unq.persistencia;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

/**
 * TODO: description
 */
public class OperacionesEquipo implements Operaciones {

    private EquipoDAO equipoDAO;

    public OperacionesEquipo() {
        this.setEquipoDAO(new EquipoDAO());
    }

    @Override
    public void generarYPersistir() {
        List<HabilidadImpl> habilidades = new ArrayList<HabilidadImpl>();
        Posicion[] posiciones = Posicion.values();
        // Crear Habilidades
        for (int i = 0; i < 11; i++) {
            HabilidadImpl hab = new HabilidadImpl(posiciones[new Random().nextInt(7)], new Random().nextInt(10));
            habilidades.add(hab);
            // System.out.println(habilidades.get(0));
        }
        // Crear Jugadores
        String nombres[] = { "Roman", "Pablo", "Clemente", "David", "Chori", "Alejandro", "Estanislao", "Pedro",
                "Sapito", "Fernando", "German", "Diego", "Maestrico", "Hernan", "Leandro", "Martin" };
        String apellidos[] = { "Riquelme", "Ledesma", "Rodriguez", "Trezeguet", "Dominguez", "Ramos", "Del Campo",
                "Marcuccini", "Ensina", "Cavenaghi", "Vega", "Ocampos", "Gonzales", "Slavich", "Rinaudo", "Martinez" };

        List<Jugador> jugadores = new ArrayList<Jugador>();
        for (int i = 0; i < 320; i++) {
            List<HabilidadImpl> h = new ArrayList<HabilidadImpl>();
            h.add(habilidades.get(new Random().nextInt(7)));
            h.add(habilidades.get(new Random().nextInt(7)));
            jugadores.add(new Jugador(nombres[new Random().nextInt(16)], apellidos[new Random().nextInt(16)], h));
            System.out.println(jugadores.get(i).getNombre() + " " + jugadores.get(i).getApellido() + " Nro: " + i);
        }
        // Crear Tecnicos
        List<Tecnico> tecnicos = new ArrayList<Tecnico>();
        List<List> listasDeFormaciones = new ArrayList<List>();

        for (int i = 0; i < 5; i++) {
            List<Posicion> f = new ArrayList<Posicion>();
            f.add(Posicion.ARQUERO);
            for (int j = 0; j < 10; j++) {
                f.add(posiciones[new Random().nextInt(6) + 1]);
            }
            listasDeFormaciones.add(f);
        }

        for (int i = 0; i < 16; i++) {
            tecnicos.add(new Tecnico(nombres[new Random().nextInt(16)],
                    listasDeFormaciones.get(new Random().nextInt(4))));
            System.out.println(tecnicos.get(i).getNombre() + ' '
                    + tecnicos.get(i).getFormacion().getPosiciones().toString());
        }

        // Crea equipos
        String[] eq = { "Racing", "Boca", "Rafaela", "All Boys", "OLimpo", "San Martin de San Juan", "Union", "Tigre",

        "Belgrano", "San Lorenzo", "Lanus", "Banfield", "Independiente", "River", "Patronato", "Instituto" };
        // int n2 = new Random().nextInt(equipoBackup.size());

        List<String> nombresEquipo = new ArrayList<String>(Arrays.asList(eq));
        List<Equipo> equipos = new ArrayList<Equipo>();
        List<Jugador> jugadoresBack = new ArrayList<Jugador>(jugadores);
        for (int i = 0; i < 16; i++) {
            List<Jugador> jugadoresEnEquipo = new ArrayList<Jugador>();
            for (int j = 0; j < 20; j++) {
                int xk = new Random().nextInt(jugadoresBack.size());
                jugadoresEnEquipo.add(jugadoresBack.get(xk));
                jugadoresBack.remove(xk);
            }
            equipos.add(new Equipo(nombresEquipo.get(nombresEquipo.size() - 1), jugadoresEnEquipo, tecnicos
                    .get(tecnicos.size() - 1)));
            equipos.get(i).armarFormacion();
            // System.out.println(equipos.get(i).getFormacion().getTitulares().size());
            nombresEquipo.remove(nombresEquipo.size() - 1);
            tecnicos.remove(tecnicos.size() - 1);
        }
        this.getEquipoDAO().save(equipos);
    }

    public EquipoDAO getEquipoDAO() {
        return this.equipoDAO;
    }

    public void setEquipoDAO(final EquipoDAO equipoDAO) {
        this.equipoDAO = equipoDAO;
    }

}
